//package com.jingbit.ai.helper;
//
//
//import androidx.annotation.NonNull;
//
//import com.fasterxml.jackson.annotation.JsonInclude;
//import com.fasterxml.jackson.core.JsonGenerator;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.*;
//
//import java.io.IOException;
//import java.text.SimpleDateFormat;
//import java.util.List;
//import java.util.Map;
//
//public class JacksonHelper {
//    private static ObjectMapper MAPPER = new ObjectMapper();
//    // 日起格式化
//    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
//
//    static {
//        //对象的所有字段全部列入
//        MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);
//        //取消默认转换timestamps形式
//        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//        //忽略空Bean转json的错误
//        MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
//        //所有的日期格式都统一为以下的样式，即yyyy-MM-dd HH:mm:ss
//        MAPPER.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));
//        //忽略 在json字符串中存在，但是在java对象中不存在对应属性的情况。防止错误
//        MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//    }
//
//    private JacksonHelper() {
//    }
//
//    /**
//     * 对象转Json格式字符串
//     *
//     * @param object 对象
//     * @return Json格式字符串
//     */
//    public static String toJson(Object object) {
//        if (object == null) {
//            return null;
//        }
//        try {
//            return object instanceof String ? (String) object : MAPPER.writeValueAsString(object);
//        } catch (Exception e) {
//            return null;
//        }
//    }
//
//
//    /**
//     * Object TO Json String 字符串输出(输出空字符)
//     *
//     * @param object 对象
//     * @return Json格式字符串
//     */
//    public static String toJsonEmpty(Object object) {
//        if (object == null) {
//            return null;
//        }
//        try {
//            MAPPER.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
//                @Override
//                public void serialize(Object param, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
//                    //设置返回null转为 空字符串""
//                    jsonGenerator.writeString("");
//                }
//            });
//            return MAPPER.writeValueAsString(object);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * Json 转为 Jave Bean
//     *
//     * @param text  json字符串
//     * @param clazz 对象类型class
//     * @param <T>   对象类型
//     * @return 对象类型
//     */
//    public static <T> T fromJSON(String text, Class<T> clazz) {
//        if (StringHelper.isEmpty(text) || clazz == null) {
//            return null;
//        }
//        try {
//            return MAPPER.readValue(text, clazz);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * Json 转为 Map
//     *
//     * @param text json
//     * @param <K>  key
//     * @param <V>  value
//     * @return map
//     */
//    public static <K, V> Map<K, V> toMap(String text) {
//        try {
//            if (StringHelper.isEmpty(text)) {
//                return null;
//            }
//            return toObject(text, new TypeReference<Map<K, V>>() {
//            });
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * Json 转 List, Class 集合中泛型的类型，非集合本身
//     *
//     * @param text json
//     * @param <T>  对象类型
//     * @return List
//     */
//    public static <T> List<T> toList(String text) {
//        if (StringHelper.isEmpty(text)) {
//            return null;
//        }
//        try {
//            return toObject(text, new TypeReference<List<T>>() {
//            });
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * Json 转 Object
//     */
//    /**
//     * @param text          json
//     * @param typeReference TypeReference
//     * @param <T>           类型
//     * @return T
//     */
//    public static <T> T toObject(String text, TypeReference<T> typeReference) {
//        try {
//            if (StringHelper.isEmpty(text) || typeReference == null) {
//                return null;
//            }
//            return (T) (typeReference.getType().equals(String.class) ? text : MAPPER.readValue(text, typeReference));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * json字符串转成list
//     *
//     * @param jsonString
//     * @param cls
//     * @return
//     */
//    public static <T> List<T> jsonToList(@NonNull String jsonString, Class<T> cls) {
//        try {
//            return MAPPER.readValue(jsonString, getCollectionType(List.class, cls));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 获取泛型的Collection Type
//     *
//     * @param collectionClass 泛型的Collection
//     * @param elementClasses  实体bean
//     * @return JavaType Java类型
//     */
//    private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
//        return MAPPER.getTypeFactory().constructParametricType(collectionClass, elementClasses);
//    }
//}
